python 字符串的搜索匹配与替换(详细)

您所在的位置:网站首页 正则 包含字符串的函数 python 字符串的搜索匹配与替换(详细)

python 字符串的搜索匹配与替换(详细)

2024-07-12 02:21| 来源: 网络整理| 查看: 265

文章目录 Python 内的正则使用基础正则修饰符的使用python 里的反向引用、捕获 需求:单次匹配字符串`re.match()` 函数`re.fullmatch()` 函数`re.search()` 函数 需求:全文搜索替换字符串`re.sub()` 函数 需求:全文搜索匹配字符串`re.findall()` 与 `re.finditer()` 函数 需求:以匹配的字符分割字符串`re.split()` 函数

有误请指出,正在改动中… 2022/09/22 增加 re.findall() 与 re.finditer() 区别解释。

Python 内的正则使用基础 正则修饰符的使用

python 里的参数用 flag 表示正则修饰符的参数。 使用多个修饰符设置正则表达式的匹配模式:re.I | re.M。

修饰符描述re.I使匹配对大小写不敏感re.L做本地化识别(locale-aware)匹配re.M多行匹配,影响 ^ 和 $re.S使 . 匹配包括换行在内的所有字符re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 python 里的反向引用、捕获 反向引用:反斜杠加数字 \N。(?exp):匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)。 但是在Python中,为 (?Pexp)。 后续可使用 group(1) 或 group(name) 获取元表达式的匹配内容。

注意:反向引用需要前缀 r,否则会被 Python 误认为是进制数:比如 \1 实际意义变成 \x01。

需求:单次匹配字符串 re.match() 函数

Python 中的 match() ,需要这个字符串以这个正则开头,【检验字符串开头有没有正确】。如果字符串开头有所不同就匹配失败,返回 none。(就是许多文章说的 “检测 RE 是不是在 string 的开始位置匹配”)

re.fullmatch() 函数

fullmatch():字符串完全匹配正则,字符串完全匹配正则【检验这个字符串是不是我们所要的东西】

re.match() 正则如果使用了 $ 也是可以实现这种作用的。 re.search() 函数

search() 是在整个字符串里部分匹配,【字符串里有没有这个的东西】。值得注意的是 search() 只会匹配一次。

需求:全文搜索替换字符串 re.sub() 函数

基本需求使用 replace(),当然这里都说了 re 模块了,复杂的替换应该使用 re.sub()。它会替换字符串里的所有匹配。

substitute n. 代替者; 代替物; 代用品; 替补(运动员); v. (以…) 代替; 取代;

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正则表达式。 repl:要替换成的字符串,可为函数。

如果是字符串会转义里面的反斜杠。如果为函数,接收一个匹配后的 Match 对象参数,需要返回要替换成的字符串。

string:源字符串。 count:最少要替换的次数。 flag:正则表达式的匹配模式

注意:不要用例如 re.sub(r"\d+", "0", "123", re.I) 将修饰符给设置到 count 里,应写关键字参数 flags=re.I。

正则表达式修饰符 - 可选标志 | 菜鸟教程

# 将“\n3.”等换为“【3】” oriStr = '\n3.这是第三点' resStr = re.sub(r'\n(\d+)\.', r'\n【\1】', oriStr) print(resStr) 【3】这是第三点 需求:全文搜索匹配字符串 re.findall() 与 re.finditer() 函数 re.findall(),返回所有匹配的一个字符串列表。 re.findall(pattern, string, flags=0) pattern.findall(string[, pos[, endpos]]) import re result1 = re.findall(r'\d+','runoob 123 google 456') pattern = re.compile(r'\d+') # 查找数字 result2 = pattern.findall('runoob 123 google 456') result3 = pattern.findall('run88oob123google456', 0, 10) print(result1) print(result2) print(result3)

输出结果:

['123', '456'] ['123', '456'] ['88', '12'] re.finditer(),返回所有匹配的一个迭代器,并且迭代器里面的是 Match 对象。 迭代器只有在手动迭代的时候才会去匹配,如果目标字符串很长且不需要全部匹配的话,使用迭代器在获取到目标字符串后停下,可以提高效率。 Match 对象意味着我们可以使用上面说到的 group(name) 引用 (?Pexp) 捕获的内容等。 re.finditer(pattern, string, flags=0) import re it = re.finditer(r"\d+","12a32bc43jf3") for match in it: # 这里仅作演示,将所有可能的都进行匹配了 print(match.group()) 12 32 43 3 需求:以匹配的字符分割字符串 re.split() 函数

将匹配的字符串作为 split 的字符,以其切割字符串返回列表

re.split(pattern, string[, maxsplit=0, flags=0]) >>>import re >>> re.split('\W+', 'runoob, runoob, runoob.') # 注意这里是大写的W ['runoob', 'runoob', 'runoob', ''] >>> re.split('(\W+)', ' runoob, runoob, runoob.') # 小括号表示保留这个分隔符 ['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', ''

重要的一点就是可以使用小括号,将分隔符保留下来。

本文部分参考:Python3 正则表达式 | 菜鸟教程



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3